package com.cb2.algorithm.leetcode;

/**
 * <a href="https://leetcode.cn/problems/available-captures-for-rook/">可以被一步捕获的棋子数(Available Captures for Rook)</a>
 * <p>给定一个 8 x 8 的棋盘，只有一个 白色的车，用字符 'R' 表示。棋盘上还可能存在白色的象 'B' 以及黑色的卒 'p'。空方块用字符 '.' 表示。</p>
 * <p>车可以按水平或竖直方向（上，下，左，右）移动任意个方格直到它遇到另一个棋子或棋盘的边界。如果它能够在一次移动中移动到棋子的方格，则能够 吃掉 棋子。</p>
 * <p>注意：车不能穿过其它棋子，比如象和卒。这意味着如果有其它棋子挡住了路径，车就不能够吃掉棋子。</p>
 * <p>返回白车 攻击 范围内 兵的数量。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * <a href='https://leetcode.cn/problems/available-captures-for-rook/'>示例</a>
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *  <ul>
 *      <li>board.length == 8</li>
 *      <li>board[i].length == 8</li>
 *      <li>board[i][j] 可以是 'R'，'.'，'B' 或 'p'</li>
 *      <li>只有一个格子上存在 board[i][j] == 'R'</li>
 *  </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/12/10 15:15
 */
public class LC0999AvailableCapturesForRook_S {

    static class Solution {
        public int numRookCaptures(char[][] board) {
            final int LENGTH = 8;
            int[][] directions = new int[][]{{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
            int res = 0;
            for (int i = 0; i < LENGTH; i++) {
                for (int j = 0; j < LENGTH; j++) {
                    if (board[i][j] == 'R') {

                        for (int[] direction : directions) {
                            int x = i;
                            int y = j;
                            while (x >= 0 && x < LENGTH && y >= 0 && y < LENGTH) {
                                if (board[x][y] == 'B') {   // 象
                                    break;
                                }
                                if (board[x][y] == 'p') {    // 卒
                                    ++res;
                                    break;
                                }
                                x += direction[0];
                                y += direction[1];
                            }
                        }
                    }
                }
            }
            return res;
        }
    }

    public static void main(String[] args) {
        char[][] chars = {
                {'.', '.', '.', '.', '.', '.', '.', '.'},
                {'.', '.', '.', 'p', '.', '.', '.', '.'},
                {'.', '.', '.', 'R', '.', '.', '.', 'p'},
                {'.', '.', '.', '.', '.', '.', '.', '.'},
                {'.', '.', '.', '.', '.', '.', '.', '.'},
                {'.', '.', '.', 'p', '.', '.', '.', '.'},
                {'.', '.', '.', '.', '.', '.', '.', '.'},
                {'.', '.', '.', '.', '.', '.', '.', '.'}
        };
        Solution solution = new Solution();
        System.out.println(solution.numRookCaptures(chars));
    }
}
